using System;
using System.Collections.Generic;
using Newtonsoft.Json;

namespace ShopifySharp.Filters;

/// <summary>
/// Options for filtering lists of Smart Collections.
/// </summary>
public class SmartCollectionListFilter : ListFilter<SmartCollection>
{
    /// <summary>
    /// Restrict results to after the specified ID.
    /// </summary>
    [JsonProperty("since_id")]
    public long? SinceId { get; set; }
        
    /// <summary>
    /// Show only those with ids in the list.
    /// </summary>
    [JsonProperty("ids")]
    public IEnumerable<long> Ids { get; set; }
        
    /// <summary>
    /// Filter to smart collections with the given title.
    /// </summary>
    [JsonProperty("title")]
    public string Title { get; set; }

    /// <summary>
    /// Filter by smart collection handle.
    /// </summary>
    [JsonProperty("handle")]
    public string Handle { get; set; }

    /// <summary>
    /// Filter to smart collections that includes given product.
    /// </summary>
    [JsonProperty("product_id")]
    public long? ProductId { get; set; }
        
    /// <summary>
    /// Show those updated at or before date.
    /// </summary>
    [JsonProperty("updated_at_min")]
    public DateTimeOffset? UpdatedAtMin { get; set; }

    /// <summary>
    /// Show those last updated at or before date.
    /// </summary>
    [JsonProperty("updated_at_max")]
    public DateTimeOffset? UpdatedAtMax { get; set; }
        
    /// <summary>
    /// Show those published at or before date.
    /// </summary>
    [JsonProperty("published_at_min")]
    public DateTimeOffset? PublishedAtMin { get; set; }

    /// <summary>
    /// Show those last published at or before date.
    /// </summary>
    [JsonProperty("published_at_max")]
    public DateTimeOffset? PublishedAtMax { get; set; }
        
    /// <summary>
    /// Restrict results to those with a given published status. Known values: published, unpublished, any. Default: any. 
    /// </summary>
    [JsonProperty("published_status")]
    public string PublishedStatus { get; set; }
}